package java学习.算法.二叉树;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;

/**
 * **************
 * 项目名称: 蓝桥杯 <br/>
 * 文件名称:  <br/>
 * 文件描述: 这里添加您的类文件描述，说明当前文件要包含的功能。 <br/>
 * 文件创建：刘世锦 <br/>
 * 创建时间: 2022/5/3 <br/>
 *
 * @version v1.0 <br/>
 * @update [序号][日期YYYY-MM-DD][更改人姓名][变更描述]<br/>
 * *************
 */
public class 从上往下打印二叉树 {
    public class TreeNode {
        int val = 0;
        TreeNode left = null;
        TreeNode right = null;

        public TreeNode(int val) {
            this.val = val;

        }

    }
    public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {

        ArrayList<Integer> list = new ArrayList<>();
        if (root==null){
//            此时list是空，返回空list
            return  list;
        }
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);
        while (!queue.isEmpty()){
            TreeNode poll = queue.poll();
            list.add(poll.val);
            if (poll.left!=null){
                queue.offer(poll.left);
            }
            if (poll.right!=null){
                queue.offer(poll.right);
            }
        }
        return  list;
    }


        // 不对。
    public ArrayList<Integer> PrintFromTopToBottom1(TreeNode root) {
        if (root==null){
            return  null;
        }
        ArrayList<Integer> list = new ArrayList<>();
        list.add(root.val);
        if (root.left!=null){
            TreeNode left = getNode(root.left);
            list.add(left.val);
        }
        if (root.right!=null){
            TreeNode right = getNode(root.right);

            list.add(right.val);
        }
        return list;
    }

    public  static  TreeNode getNode(TreeNode root){
        if (root!=null){
            return  root;
        }
        else if(root.left!=null){
            return getNode(root.left);
        }
        else if (root.right!=null){
            return getNode(root.right);

        }
        return null;
    }
}
